<?php
abstract class Controller {
	protected $registry;	
	protected $id;
	// protected $layout;
	// protected $template;
	protected $children = array();
	protected $data = array();
	protected $output;
	
	public function __construct($registry) {
		$this->registry = $registry;
	}
	
	public function __get($key) {
		return $this->registry->get($key);
	}
	
	public function __set($key, $value) {
		$this->registry->set($key, $value);
	}
			
	protected function forward($route, $args = array()) {
		return new Action($route, $args);
	}

	// protected function redirect($url, $status = 302) {
		// header('Status: ' . $status);
		// header('Location: ' . str_replace('&amp;', '&', $url));
		// exit();
	// }
	
	protected function getChild($child, $args = array()) {
		$action = new Action($child, $args);
		$file = $action->getFile();
		$class = $action->getClass();
		$method = $action->getMethod();
	
		if (file_exists($file)) {
			require_once($file);

			$controller = new $class($this->registry);
			
			$controller->$method($args);
			
			return $controller->output;
		} else {
			$this->log->write('a error happen at controller getchild.');
		}		
	}
	
	protected function render($log_word) {
		foreach ($this->children as $child) {
			$this->data[basename($child)] = $this->getChild($child);
		}
		
		if (file_exists(DIR_SYSTEM.'logs/ASYNLOG_FILE.txt')) {
			$this->output=$log_word;
			return $this->output;
    	} else {
      		$this->log->write('a error happen at controller render.');
    	}
	}
}
?>